home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Resources / Browsers, Managers & Extensions / CookieSwap 0.5 / cookieswap-0.5.0-fx.xpi / chrome / chromeFiles / content / cookie.js next >
Text File  |  2007-07-22  |  9KB  |  207 lines

  1. // *****************************************************************************
  2. // *                           cs_Cookie Class                                 *
  3. // *                                                                           *
  4. // ************************** Coding Standards *********************************
  5. // *  gMyVariable     - global variable (starts with "g", then mixed case)     *
  6. // *  myVariable      - variables passed into functions                        *
  7. // *  my_variable     - local variable inside of a function                    *
  8. // *  this.myVariable - class attributes/variable (mixed case & always         *
  9. // *                    referenced with "this.")                               *
  10. // *  MyFunction      - functions are always mixed case                        *
  11. // *  MY_CONSTANT     - constants are all caps with underscores                *
  12. // *                                                                           *
  13. // *************************** Revision History ********************************
  14. // *  Name       Date       BugzID  Action                                     *
  15. // *  ---------  ---------  -----   ------                                     *
  16. // *  SteveTine  28Dec2005  12561   Initial Creation                           *
  17. // *  SteveTine  11Jan2006  12720   Fixing the way session cookies are handled *
  18. // *  SteveTine  16Jan2007  Trac9   Changing class name to avoid name clash    *
  19. // *                                                                           *
  20. // ************************* BEGIN LICENSE BLOCK *******************************
  21. // * Version: MPL 1.1                                                          *
  22. // *                                                                           *
  23. // *The contents of this file are subject to the Mozilla Public License Version*
  24. // * 1.1 (the "License"); you may not use this file except in compliance with  *
  25. // * the License. You may obtain a copy of the License at                      *
  26. // * http://www.mozilla.org/MPL/                                               *
  27. // *                                                                           *
  28. // * Software distributed under the License is distributed on an "AS IS" basis,*
  29. // * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License  *
  30. // * for the specific language governing rights and limitations under the      *
  31. // * License.                                                                  *
  32. // *                                                                           *
  33. // * The Original Code is the CookieSwap Mozilla/Firefox Extension             *
  34. // *                                                                           *
  35. // * The Initial Developer of the Original Code is                             *
  36. // * Steven Tine.                                                              *
  37. // * Portions created by the Initial Developer are Copyright (C) 2006          *
  38. // * the Initial Developer. All Rights Reserved.                               *
  39. // *                                                                           *
  40. // * Contributor(s): Steven Tine                                               *
  41. // *                                                                           *
  42. // **************************END LICENSE BLOCK**********************************
  43.  
  44. //The Date class takes milliseconds, while cookies are stored in seconds.  Use
  45. //  this define to convert from sec to ms.
  46. const SEC_TO_MS_MULT = 1000;
  47. const TAB_FIELD = "\t";
  48.  
  49. //-------------------cs_Cookie class def---------------------
  50. //  This file contains the definition of the "cs_Cookie" class which
  51. //  provides the ability to input a nsICookie or String consisting of a cookie
  52. //  line in a storage file.  It can then output the cookie in numerous
  53. //  styles:
  54. //  getCookieString-The string style needed by CookieService.setCookieString()
  55. //  getCookieUrl- URI used by CookieService.setCookieString()
  56. //  getCookieFileString-The string style used for storing a cookie in a file
  57. // 
  58. //"cookie" can be a NsICookie or it can be a string that corresponds
  59. //  to the cookie file string returned from a previous instance of
  60. //  this cookie's getCookieFileString() call.
  61. function cs_Cookie(cookie)   
  62. {
  63.    //Define a debug function for the class...change true/false to turn it on/off
  64.    this.classDump=function(s){true ? cookieswap_dbg("[cs_Cookie]" + s) : (s)}
  65.  
  66.    //This is the way to call the debug function
  67.    this.classDump("START cs_Cookie ctor");
  68.  
  69.    this.isValid = false;  //Init cookieValid flag to false...the code below will
  70.                                 //  change to true if it is found to be valid
  71.  
  72.    //I'm not sure how to override methods in javascript, so I'll use a run-time
  73.    //  type check to do it
  74.    if (cookie instanceof Components.interfaces.nsICookie)
  75.    {
  76.       //Fill in the attributes of the class based on the attributes of the cookie
  77.       this.expires  = cookie.expires;
  78.       this.host     = cookie.host;
  79.       this.isDomain = cookie.isDomain;
  80.       this.isSecure = cookie.isSecure;
  81.       this.name     = cookie.name;
  82.       this.path     = cookie.path;
  83.       this.policy   = cookie.policy;
  84.       this.status   = cookie.status;
  85.       this.value    = cookie.value;
  86.  
  87.       this.isValid = true;  //Looks like a good cookie...mark it as valid
  88.    }
  89.    else
  90.    {
  91.       if (cookie.charAt(0) != '#')  //Comment lines start with a "#"
  92.       {
  93.          //Cookie File string format is:
  94.          //  domain <tab> tailmatch <tab> path <tab> secure <tab> expires <tab> name <tab> value
  95.          //   [0]           [1]           [2]         [3]          [4]           [5]        [6]
  96.          var  fields=cookie.split(TAB_FIELD);
  97.  
  98.          //The split should find at least 6 fields...if not, it is not a valid string
  99.          if (fields.length >= 6)
  100.          {
  101.             this.host     = fields[0];
  102.             this.path     = fields[2];
  103.             this.isSecure = fields[3]=="TRUE" ? true : false;
  104.             this.expires  = fields[4];
  105.             this.isDomain = this.host.charAt(0) == '.' ? true : false;
  106.             this.name     = fields[5];
  107.             this.policy   = null;  //Information is not in the cookieString (I think)
  108.             this.status   = null;  //Information is not in the cookieString (I think)
  109.             this.value    = fields[6];
  110.       
  111.             this.isValid = true;  //Looks like a good cookie...mark it as valid
  112.          }
  113.          else
  114.          {
  115.             this.classDump("Cookie split length is only " + fields.length + " not 6+ in =>" + cookie);
  116.          }
  117.       }
  118.    }
  119.  
  120.    this.classDump("END cs_Cookie ctor...cookie is " + this.isValid);
  121. }
  122.  
  123. //Public Methods
  124. //--------------cs_Cookie class methods-------------------
  125. cs_Cookie.prototype.getCookieFileString = function()
  126. {
  127.    this.classDump("START getCookieFileString()");
  128.  
  129.    //Cookie File format is:
  130.    //  domain <tab> tailmatch <tab> path <tab> secure <tab> expires <tab> name <tab> value
  131.    var cookie_string;
  132.  
  133.    var tailmatch = this.host.charAt(0) == '.' ? "TRUE" : "FALSE";
  134.    var is_secure = this.isSecure ? "TRUE" : "FALSE"; 
  135.    
  136.    cookie_string = this.host + TAB_FIELD + 
  137.                    tailmatch + TAB_FIELD + 
  138.                    this.path + TAB_FIELD +
  139.                    is_secure + TAB_FIELD +
  140.                    this.expires + TAB_FIELD +
  141.                    this.name + TAB_FIELD +
  142.                    this.value;
  143.  
  144.    this.classDump("END getCookieFileString()");
  145.  
  146.    return(cookie_string);
  147. }
  148.  
  149. //This method returns a string that captures all the attributes of the cookie.  It is a 
  150. //  string that can be used in the setCookieString method of the Cookie Service
  151. cs_Cookie.prototype.getCookieString = function()
  152. {
  153.    this.classDump("START getCookieString()");
  154.  
  155.    var cookie_string;
  156.  
  157.    cookie_string = this.name + "=" + this.value + ";";
  158.  
  159.    //Domain cookies are those that start with ".", like ".google.com"
  160.    if (this.host.charAt(0) == '.')
  161.    {
  162.       cookie_string = cookie_string + "domain=" + this.host + ";";
  163.    }
  164.  
  165.    //Cookies with an expiration of 0 are "session cookies" that expire at the end of the
  166.    //  session.  Leaving the "expires=" off the string will cause the browser to treat
  167.    //  it as such.
  168.    if (this.expires != 0)
  169.    {
  170.       cookie_string = cookie_string + "expires=" + (new Date(SEC_TO_MS_MULT * this.expires)) + ";";
  171.    }
  172.  
  173.    cookie_string = cookie_string + "path=" + this.path + ";";
  174.  
  175.    if (this.isSecure == true)
  176.    {
  177.       cookie_string = cookie_string + "secure;";
  178.    }
  179.  
  180.    this.classDump("cookie_string=>" + cookie_string + "\nEND getCookieString()");
  181.  
  182.    return (cookie_string);
  183. }
  184.  
  185. //This method returns a nsIURI object that is the URL of the cookie
  186. cs_Cookie.prototype.getCookieUrl = function()
  187. {
  188.    this.classDump("START getCookieUrl()");
  189.    var uri = ffGetStandardUrl();
  190.  
  191.    //In the uri.spec, specify https if secure or http if not
  192.    var http_proto = this.isSecure ? "https://" : "http://";
  193.    uri.spec = http_proto + this.host + this.path;
  194.  
  195.    this.classDump("uri.spec=>" + uri.spec + "\nEND getCookieUrl()");
  196.  
  197.    return(uri);
  198. }
  199.  
  200. //This method will return if the cookie is a "session" cookie (on that expires
  201. //  at the end of the session) or not
  202. cs_Cookie.prototype.isSessionCookie = function()
  203. {
  204.    //A session cookie is one with an expiration time of 0
  205.    return(this.expires == 0 ? true : false);
  206. }
  207.